home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 46
/
Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso
/
-in_the_mag-
/
reader_requests
/
scilab
/
tests
/
macro.dia.ref
< prev
next >
Wrap
Text File
|
1999-09-16
|
18KB
|
1,255 lines
// simple
//
deff('[x,y]=t1(a,b)','x=a+b,y=a-b')
[u,v]=t1(1,2);
if u<> 3 then bugmes();quit;end
if v<>-1 then bugmes();quit;end
//
//with arguments
b=2;
if t1(1)<>t1(1,2) then bugmes();quit;end
t2=t1;
//
//compile
comp(t1)
[u,v]=t1(1,2);
if u<> 3 then bugmes();quit;end
if v<>-1 then bugmes();quit;end
b=2;
if t1(1)<>t1(1,2) then bugmes();quit;end
//
//resume
//
deff('[x,y]=t3(a,b)','x=a+b,y=a-b,z=resume(a*a)')
[u,v]=t3(1,2);
if u<> 3 then bugmes();quit;end
if v<>-1 then bugmes();quit;end
if z<>1 then bugmes();quit;end
b=2;
clear z
if t3(1)<>t3(1,2) then bugmes();quit;end
if z<>1 then bugmes();quit;end
t4=t3;
//compiled
comp(t3)
[u,v]=t3(1,2);
if u<> 3 then bugmes();quit;end
if v<>-1 then bugmes();quit;end
if z<>1 then bugmes();quit;end
clear z
b=2;
if t3(1)<>t3(1,2) then bugmes();quit;end
if z<>1 then bugmes();quit;end
//
// macro + clauses
//
text = ['if n>0 then x=1'
'y=0;for k=1:n,y=y+k,end'
'else x=-1'
'if n=4 then y=''yes'' '
'else y=''no'' '
'end'
'end'
'if n=-1 then return,end'
'if n=-2 then tt=resume(n),end'
'select x,'
'case 1 then x=''pos'' ,tt=resume(''ok''),'
'case -1 then x=''neg'' ,'
'end'];
//
deff('[x,y]=t5(n)',text)
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
// en compile maintenant
clear u v tt
comp(t5)
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//
// complex clauses
//
text = ['if n>0 then x=1'
'y=0;for k=1:b(n),y=y+b(k),end'
'else x=-1'
'if n=4 then y=b(''yes'') '
'else y=b(''no'') '
'end'
'end'
'if n=b(-1) then return,end'
'if n=b(-2) then tt=resume(b(n)),end'
'select x,'
'case 1 then x=b(''pos'') ,tt=resume(b(''ok'')),'
'case b(-1) then x=b(''neg'') ,'
'end'];
deff('[x]=b(a)','x=a,prod([1 1])')
deff('[x,y]=t5(n)',text)
Warning :redefining function: t5
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
// en compile maintenant
clear u v tt
comp(t5)
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//compiled b
comp(b)
deff('[x,y]=t5(n)',text)
Warning :redefining function: t5
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//
clear u v tt
comp(t5)
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//more complex
deff('[x]=b(a)','if a=1 then x=1,else x=a,prod([1 1]),end')
Warning :redefining function: b
//
deff('[x,y]=t5(n)',text)
Warning :redefining function: t5
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//compile
clear u v tt
comp(t5)
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//
comp(b)
deff('[x,y]=t5(n)',text)
Warning :redefining function: t5
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
//
clear u v tt
comp(t5)
[u,v]=t5(5);
if u<>'pos' then bugmes();quit;end
if v<>15 then bugmes();quit;end
if tt<>'ok' then bugmes();quit;end
clear tt
[u,v]=t5(-1);
if u<>-1 then bugmes();quit;end
if v<>'no' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
clear tt v
u=t5(-2);
if u<>-1 then bugmes();quit;end
if tt<>-2 then bugmes();quit;end
clear tt
u=t5(-4);
if u<>'neg' then bugmes();quit;end
if exists('tt')=1 then bugmes();quit;end
// resume
deff('[]=t6(a)','x=resume(a)')
clear ans x
t6(15)
if x<>15 then bugmes();quit;end
if exists('ans')=1 then bugmes();quit;end
//
comp(t6)
clear ans x
t6(15)
if x<>15 then bugmes();quit;end
if exists('ans')=1 then bugmes();quit;end
//
//
//
deff('[ydot]=simul(t,y,a)','ydot=a')
a=2;
//appel le plus imple
y=ode(0,0,1:2,simul)
y =
! 2. 4. !
if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
//idem en compile
comp(simul)
y=ode(0,0,1:2,simul)
y =
! 2. 4. !
if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
//appel avec passage d'arguments supplementaires
deff('[ydot]=simul(t,y,a)','ydot=a')
Warning :redefining function: simul
y=ode(0,0,1:2,list(simul,a))
y =
! 2. 4. !
if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
//idem en compile
comp(simul)
y=ode(0,0,1:2,list(simul,a))
y =
! 2. 4. !
if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
//
//non linear
//
text=['for k=1:n,'
'y=ode(a*(k-1),k-1,k,simul),'
'x=[x,y],'
'end'];
//
deff('[x]=calcul(n)',text)
deff('[ydot]=simul(t,y,a)','ydot=a')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=a')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=a')
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=a')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//resume in external
deff('[ydot]=simul(t,y,a)','ydot=a,tt=resume([tt,t])')
Warning :redefining function: simul
tt=[]
tt =
[]
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=a')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=a')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
//external calls a macro
//
deff('[x]=b(a)','if a=1 then x=a,prod([1 1]),else x=a,prod([1 1]),end')
Warning :redefining function: b
text=['for k=1:n,'
'y=ode(a*(k-1),k-1,k,simul),'
'x=[x,y],'
'end'];
//
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
deff('[ydot]=simul(t,y,a)','ydot=b(a),tt=resume([tt,t])')
Warning :redefining function: simul
tt=[]
tt =
[]
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(b)
text=['for k=1:n,'
'y=ode(a*(k-1),k-1,k,simul),'
'x=[x,y],'
'end'];
//
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
text(2)='y=ode(a*(k-1),k-1,k,list(simul,a)),';
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
deff('[ydot]=simul(t,y,a)','ydot=b(a),tt=resume([tt,t])')
Warning :redefining function: simul
tt=[]
tt =
[]
deff('[x]=calcul(n)',text)
Warning :redefining function: calcul
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(simul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
comp(calcul)
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
deff('[ydot]=simul(t,y,a)','ydot=b(a)')
Warning :redefining function: simul
x=[];
x=calcul(3);
if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
//
//macro defining ,compiling and executing a macro
//
text=['deff(''[x]=b(a)'',''if a=1 then x=1,else x=a,prod([1 1]),end''),'
'comp(b),'
'x=b(n),']
text =
!deff('[x]=b(a)','if a=1 then x=1,else x=a,prod([1 1]),end'), !
! !
!comp(b), !
! !
!x=b(n), !
deff('[x]=t8(n)',text')
y=t8(10);
if y<>10 then bugmes();quit;end
comp(t8)
y=t8(10);
if y<>10 then bugmes();quit;end
//
//
s=poly(0,'s');z=poly(0,'z');
deff('[ok]=cplist(l1,l2)',['ok=1;'
'if size(l1)<>size(l2) then ok=0,return,end'
'for k=1:size(l1),'
'if l1(k)<>l2(k) then ok=0,return,end;'
'end'])
deff('[r]=horner(p,x)',['if type(p)==15|type(p)==16 then';
'r=horner(p(2),x)./horner(p(3),x),';
'return,';
'end;';
'd=maxi(degree(p));';
'r=coeff(p,d);';
'for k=1:d,';
'r=r*x+coeff(p,d-k)*eye;';
'end;'])
Warning :redefining function: horner
deff('[f]=%prp(p1,p2)',['[l,c]=size(p2);';
'if l*c <>1 then f=p1*invr(p2),return,end;';
'[l,c]=size(p1);';
'[p1 p2]=simp(p1,p2*ones(l,c));';
'f=tlist(''r'',p1,p2,[]);'])
Warning :redefining function: %prp
horn=horner;
h=1/s;
if cplist(h,tlist('r',1,s,[]))=0 then bugmes();quit;end
h1=(z-1)/(z+1);
hrn=horner(h,h1);
if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
//
comp(horner)
hrn=horner(h,h1);
if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
//
comp(%prp);
h=1/s;
if cplist(h,tlist('r',1,s,[]))=0 then bugmes();quit;end
h1=(z-1)/(z+1);
hrn=horn(h,h1);
if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
//
comp(horn)
hrn=horn(h,h1);
if cplist(hrn , tlist('r',z+1,z-1,[]))=0 then bugmes();quit;end
//
//
//
text=['aa=1,if a=2 then aa=b(a),end']
text =
aa=1,if a=2 then aa=b(a),end
fic=file('open','test_macro_exec','unknown')
fic =
3.
write(fic,text)
file('close',fic)
deff('[x]=b(a)','x=a,prod([1 1])')
Warning :redefining function: b
y=t9(2)
aa=1,if a=2 then aa=b(a),end
aa =
1.
aa =
2.
y =
2.
if y<>2 then bugmes();quit;end
file('rewind',fic)
comp(t9)
y=t9(2)
aa=1,if a=2 then aa=b(a),end
aa =
1.
aa =
2.
y =
2.
if y<>2 then bugmes();quit;end
//
comp(b)
Warning :redefining function: t9
y=t9(2)
aa=1,if a=2 then aa=b(a),end
aa =
1.
aa =
2.
y =
2.
if y<>2 then bugmes();quit;end
comp(t9)
y=t9(2)
aa=1,if a=2 then aa=b(a),end
aa =
1.
aa =
2.
y =
2.
if y<>2 then bugmes();quit;end